package com.exam.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import entity.IdWorker;
import com.exam.mapper.BrandMapper;
import com.exam.mapper.SpuMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.exam.pojo.Goods;
import com.exam.pojo.Spu;
import com.exam.service.SpuService;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.util.StringUtil;

@Service
public class SpuServiceImpl implements SpuService {
    @Autowired
    private IdWorker idWorker;

    @Autowired
    private BrandMapper brandMapper;

    @Autowired
    private SpuMapper spuMapper;

    @Override
    public void saveGoods(Goods goods) {
        Spu spu= goods.getSpu();
        if (spu.getId()==null){
            spu.setId(idWorker.nextId());
            spuMapper.insertSelective(spu);
        }else {
            spuMapper.updateByPrimaryKeySelective(spu);
        }
    }

    @Override
    public Goods findGoodsById(Long id) {
        Spu spu=spuMapper.selectByPrimaryKey(id);
        Goods goods=new Goods();
        goods.setSpu(spu);
        return goods;
    }

    @Override
    public void audit(Long spuId) {
        Spu spu = spuMapper.selectByPrimaryKey(spuId);
        //判断商品是否已经删除
        if(spu.getIsDelete().equalsIgnoreCase("1")){
            throw new RuntimeException("该商品已经删除！");
        }
        //实现上架和审核
        spu.setStatus("1"); //审核通过
        spu.setIsMarketable("1"); //上架
        spuMapper.updateByPrimaryKeySelective(spu);
    }

    @Override
    public void pull(Long spuId) {
        Spu spu = spuMapper.selectByPrimaryKey(spuId);
        if(spu.getIsDelete().equals("1")){
            throw new RuntimeException("此商品已删除！");
        }
        spu.setIsMarketable("0");//下架状态
        spuMapper.updateByPrimaryKeySelective(spu);
    }

    @Override
    public void put(Long spuId) {
        Spu spu = spuMapper.selectByPrimaryKey(spuId);
        //检查是否删除的商品
        if(spu.getIsDelete().equals("1")){
            throw new RuntimeException("此商品已删除！");
        }
        if(!spu.getStatus().equals("1")){
            throw new RuntimeException("未通过审核的商品不能！");
        }
        //上架状态
        spu.setIsMarketable("1");
        spuMapper.updateByPrimaryKeySelective(spu);
    }

    @Override
    public void logicDelete(Long spuId) {
        Spu spu = spuMapper.selectByPrimaryKey(spuId);
        if(spu.getIsMarketable().equals("1")){
            throw new RuntimeException("上架商品无法删除");
        }
        spu.setIsDelete("1");
        spu.setStatus("0");
        spuMapper.updateByPrimaryKeySelective(spu);
    }

    @Override
    public PageInfo<Spu> findPage(Spu spu, int page, int size) {
        PageHelper.startPage(page, size); // 分页
        Example example = createExample(spu); // 搜索条件
        return new PageInfo<Spu>(spuMapper.selectByExample(example)); // 搜索
    }

    private Example createExample(Spu spu) {
        Example example = new Example(Spu.class);
        Example.Criteria criteria = example.createCriteria();
        if(spu!=null){
            if (!StringUtil.isEmpty(spu.getName())){
                criteria.andLike("name", "%"+spu.getName()+"%");
            }
            if (!StringUtil.isEmpty(spu.getSn())){
                criteria.andLike("sn", "%"+spu.getSn()+"%");
            }
            if (spu.getBrandId()!=null){
                criteria.andEqualTo("brand_id", spu.getBrandId());
            }
        }
        return example;
    }
}
